// byte -- 字节
const byteUnit = {
    BIT: 8, // 位
    B: 1, // 字节
    KB: 1024, // 千字节
    MB: 1024 * 1024, // 兆字节
    GB: 1024 * 1024 * 1024, // 吉字节
    TB: 1024 * 1024 * 1024 * 1024, // 太字节
}

/**
 * 字节转位（bit）
 * @param byte 字节大小
 * @param precision 返回值的精度
 * @returns {string} 返回转化后的值
 */
export function byteToBit(byte: number, precision: number = 2): string {
    const bit = byte * byteUnit.BIT
    return `${bit.toFixed(precision)} bit`
}

/**
 * 字节转千字节（KB）
 * @param byte 字节大小
 * @param precision 返回值的精度
 * @returns {string} 返回转化后的值
 */
export function byteToKb(byte: number, precision: number = 2): string {
    const kb = byte / byteUnit.KB
    return `${kb.toFixed(precision)} KB`
}

/**
 * 字节转兆字节（MB）
 * @param byte 字节大小
 * @param precision 返回值的精度
 * @returns {string} 返回转化后的值
 */
export function byteToMb(byte: number, precision: number = 2): string {
    const mb = byte / byteUnit.MB
    return `${mb.toFixed(precision)} MB`
}

/**
 * 字节转吉字节（GB）
 * @param byte 字节大小
 * @param precision 返回值的精度
 * @returns {string} 返回转化后的值
 */
export function byteToGb(byte: number, precision: number = 2): string {
    const gb = byte / byteUnit.GB
    return `${gb.toFixed(precision)} GB`
}

/**
 * 字节转太字节（TB）
 * @param byte 字节大小
 * @param precision 返回值的精度
 * @returns {string} 返回转化后的值
 */
export function byteToTb(byte: number, precision: number = 2): string {
    const tb = byte / byteUnit.TB
    return `${tb.toFixed(precision)} TB`
}

/**
 * 字节转最大单位
 * @param byte 字节大小
 * @param precision 返回值的精度
 * @returns {string} 返回转化后的值
 */
export function byteToHuman(byte: number, precision: number = 2): string {
    const units = ['B', 'KB', 'MB', 'GB', 'TB']
    let i = 0

    while (byte >= 1024 && i < units.length - 1) {
        byte /= 1024
        i++
    }

    return `${byte.toFixed(precision)} ${units[i]}`
}
